String cipherText = " XNATNX" + " RBEXMG" + "PRBFX ALI MKMG BFFY, MGTSQ JMRRY. ZBZE" + "FLOX P.M. MSIU FKX FLDYPC FKAP RPD KL DONA" + "FMKPC FM NOR ANXP." + " SOLFA TGMZ DXL LKKZM VXI BWHNZ MBFFY" + "MG, TSQ A NVPD NMM VFYQ. CJU ROGA K.C. RAC" + "RRMTN S.B. IF H.P. HNZ ME? SSPXLZ DFAX LRAEL" + "TLMK XATL RPX BM AEBF HS MPIKATL TO" + "HOKCCI HNRY. TYM VDSM SUSSX GAMKR, BG AIL" + "AXH NZMLF HVUL KNN RAGY QWMCK, MNQS" + "TOIL AXFA AN IHMZS RPT HO KFLTIM. IF MTGNLU" + "H.M. CLM KLZM AHPE ALF AKMSM, ZULPR FHQ-" + "CMZT SXS RSMKRS GNKS FVMP RACY OSS QESBH" + "NAE UZCK CON MGBNRY RMAL RSH NZM, BKTQAP" + "MSH NZM TO ILG MELMS NAGMJU KC KC." + " TQKFX BQZ NMEZLI BM ZLFA AYZ MARS UP QOS" + "KMXBP SUE UMIL PRKBG MSK QD." + " NAP DZMTB N.B. OBE XMG SREFZ DBS AM IMHY" + "GAKY R. MULBY M.S. SZLKO GKG LKL GAW" + "XNTED BHMB XZD NRKZH PSMSKMN A.M. MHIZP" + "DK MIM, XNKSAK C KOK MNRL CFL INXF HDA" + "GAIQ." + " GATLM Z DLFA A QPHND MV AK MV MAG C.P.R." + "XNATNX PD GUN MBKL I OLKA GLDAGA KQB" + "FTQO SKMX GPDH NW LX SULMY ILLE MKH" + "BEALF MRSK UFHA AKTS."; String key = "MONARCHY"; /* * forberede cipher text ved at fjerne alt der ikke er bogstaver * og konvertere alle forekomster af 'J' til 'I' */ String cleanCipherText = ""; for ( int i=0; i= square.length ) { x = 0; y++; } } // indplacer de bogstaver der ikke forekommer i 'key' for ( char c='A'; c<='Z'; c++ ) if ( c != 'J' ) // ignorer 'J' if ( key.indexOf( c ) == -1 ) { // 'c' forekommer ikke i nøglen => indplacer square[ x ][ y ] = c; x++; if ( x >= square.length ) { x = 0; y++; } } // udskriver 5x5 nøgle for ( y=0; y= square.length ) { x1 = 0; y1++; } } // INV: square[ x1 ][ y1 ] == c1 // find 'c2' i nøglen int x2=0, y2=0; while ( true ) { if ( square[ x2 ][ y2 ] == c2 ) break; x2++; if ( x2 >= square.length ) { x2 = 0; y2++; } } // INV: square[ x2 ][ y2 ] == c2 char p1, p2; // 'c1' og 'c2' dekrypteret if ( x1 == x2 ) { // samme kolonne // hvis der er et tegn ovenover så tag det, // ellers tag nederste tegn if ( y1 > 0 ) p1 = square[ x1 ][ y1 - 1 ]; else p1 = square[ x1 ][ square[0].length - 1 ]; // hvis der er et tegn ovenover så tag det, // ellers tag nederste tegn if ( y2 > 0 ) p2 = square[ x2 ][ y2 - 1 ]; else p2 = square[ x2 ][ square[0].length - 1 ]; } else if ( y1 == y2 ) { // samme række // hvis der er et tegn til venstre så tag det, // ellers tag sidste tegn if ( x1 > 0 ) p1 = square[ x1 - 1 ][ y1 ]; else p1 = square[ square.length - 1 ][ y1 ]; // hvis der er et tegn til venstre så tag det, // ellers tag sidste tegn if ( x2 > 0 ) p2 = square[ x2 - 1 ][ y2 ]; else p2 = square[ square.length - 1 ][ y2 ]; } else { // "rektangel" p1 = square[ x2 ][ y1 ]; p2 = square[ x1 ][ y2 ]; } plainText += p1; plainText += p2; } // udskriver den dekrypterede tekst println( plainText );